home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / complex / cmplx_16.txt < prev    next >
Encoding:
Text File  |  1994-09-22  |  18.2 KB  |  361 lines

  1.  
  2.         (C) 1989  Thomas Groß, Lynarstraße 13, D 1 Berlin 65      
  3.     ____________________________________________________________
  4.  
  5.  
  6.  
  7.                      Anleitung zu CMPLX_16.FOR
  8.                  __________________________________
  9.  
  10.                 
  11.       
  12.       CMPLX_16.FOR ist eine Programmsammlung für doppelt-genaue komplexe
  13.  Ausführung der INTRINSIC-Funktionen von Fortran. Darüber hinaus enthält
  14.  sie einige in Fortran 77 nicht vorgesehene Funktionen.
  15.  
  16.       Es gibt sehrwohl Fortran-Compiler, die COMPLEX*16 verarbeiten
  17.  können, aber Prospero-Fortran versteht in den Versionen bis mmg2.14 nur
  18.  REAL*8 . Selbst die Zusatz-Library zur Ausnutzung des Coprozessors
  19.  68881, die von Prospero angeboten wird, beherrscht nur COMPLEX*8, also
  20.  COMPLEX in normaler Genauigkeit.
  21.       Lediglich die Fa. Plünnecke in 3325 Lengede bietet ein Paket von
  22.  SUBROUTINEn an, das ähnlich meiner Bibliothek komplexe Berechnungen aus-
  23.  führt. Wer wie ich darauf verzichten will, kann meine Unterprogramme
  24.  benutzen.
  25.       Ich liefere Ihnen hier nur den Quellcode (383 Programmzeilen);
  26.  Sie können ihn in den Editor Ihres Fortran-Systems laden (egal ob
  27.  ProFortran von Prospero, AC-Fortran von ABSoft oder Swifte-Fortran
  28.  von GDAT), von dort aus compilen und an Ihr Hauptprogramm linken.
  29.  Haben Sie Geduld, während der Compiler am Hilfsprogramm CDKETTE hart
  30.  zu beißen hat!
  31.  
  32.  
  33.       Da die Funktion F vom selben Typ wie das Argument X sein soll,
  34.  nämlich COMPLEX*16, ist es nicht möglich, FUNCTION-Unterprogramme zu
  35.  schreiben: COMPLEX*16 FUNCTION F(X) akzeptiert der ProFortran-Compiler
  36.  nicht. Deshalb sind die Unterprogramme alle SUBROUTINEn. 
  37.  
  38.       Die doppelt-genaue komplexe Zahl X hat den REAL*8-Realteil A und
  39.  den REAL*8-Imaginärteil B ; das doppelt-genaue komplexe Ergebnis der
  40.  Funktionsberechnung F(X) hat den REAL*8-Realteil C und den REAL*8-
  41.  Imaginärteil D . Diese Variablen müssen als solche in ihrem Typ dekla-
  42.  riert sein; sie dürfen natürlich auch anders heißen.
  43.  
  44.  Dann kann die Funktion F(X) aufgerufen werden mit
  45.  
  46.       CALL F(A,B,C,D)
  47.  
  48.  Die Eingabewerte A und B werden von der SUBROUTINE nur gelesen und
  49.  demnach nicht verändert. Doch bedenken Sie, daß REAL-Operationen nie
  50.  exakt sind, auch wenn sie mit DOUBLE PRECISION ausgeführt werden.
  51.  Der größte Vorteil von REAL*8 ist der zulässige Wertebereich von
  52.  ± ( 2.3D-308 ÷ 1.79D308 )  und die exakte 0 .
  53.  Interpretieren Sie Ergebnisse > ± 2.D305 als ∞ bzw. als vom Rechner
  54.  nicht mehr korrekt darstellbar.
  55.     Häufig wird von der komplexen Zahl der Betrag gebildet
  56.  SQRT(A^2 + B^2) ; dabei darf der Radikand die oben genannten Grenzen des
  57.  Wertebereichs nicht überschreiten, so daß  1.5D-154 < |A|,|B| ≤ 9.4D153
  58.  erfüllt sein muß; s. dazu CDA..., CDDIV, CDLOG, CDSQRT.
  59.  Ich habe zwar einige Sicherheitsabfragen eingebaut, aber im Interesse
  60.  einer endlichen Rechenzeit wird nicht alles abgeprüft.
  61.     Ebenso läßt die Genauigkeit der trigonometrischen INTRINSIC-Funktio-
  62.  nen zu wünschen übrig, sofern das Argument groß ist. Wenn  cos(π/2) = 0
  63.  ist, so gilt das für cos(10000π/2) noch lange nicht; eine Glättungs-
  64.  routine wie CD0D0 hat hier auch keinen Sinn mehr, das Argument vorher
  65.  modulo 2π  zu berechnen erhöht die Genauigkeit ebenfalls nicht. 
  66.  Seien Sie also vorsichtig mit Ergebnissen, bei deren Berechnung trigo-
  67.  nometrische Funktionen großer Argumente vorkommen! Auch hier ließe sich
  68.  einiges verbessern, insbesondere durch Reihenentwicklungen am Rand des
  69.  Wertebereichs.
  70.  
  71.  Verwendete Hilfsmittel: 
  72.  Eigenes Gehirnschmalz und der Klassiker
  73.       Abramowitz, Milton; Irene Stegun u.a.
  74.       Handbook of mathematical functions
  75.       Dover Publications, New York, 9.Aufl. 1970
  76.  Meine Empfehlung: Kaufen oder benutzen Sie nie die ersten Auflagen 
  77.  solcher Nachschlagewerke; es kostet Stunden, Tage, Wochen, bis Sie
  78.  merken, daß Sie einem Druckfehler aufgesessen sind!
  79.       
  80.       Die von mir geschriebenen Unterprogramme haben die Namen, die 
  81.  diese Funktionen als spezifische Namen üblicherweise haben. Sie als
  82.  EXTERNAL zu deklarieren ist nicht nötig, weil ProFortran sie ja nicht
  83.  als INTRINSIC-Funktionen kennt. 
  84.  
  85.  
  86.  Die Funktionen im einzelnen, sofern sie komplexe Argumente haben:
  87.  =================================================================
  88.  
  89.  generischer Name   spezifischer Name   mein Programmname
  90.  _______________________________________________________________________
  91.  
  92.  
  93.  ABS                CDABS               -
  94.       Berechnet den doppelt-genauen Betrag Y der COMPLEX*16-Zahl X .
  95.       Y muß dazu als REAL*8 deklariert worden sein. Ich habe dazu kein
  96.       Unterprogramm geschaffen, weil sich diese Aufgabe in 1 Zeile 
  97.       erledigen läßt:  Y = SQRT(A*A+B*B)
  98.       
  99.  -                  AIMAG               -
  100.       Gibt den Imaginärteil von X als REAL*4-Zahl an; demnach ist
  101.       AIMAG(X) gleich REAL(B) .
  102.       
  103.  CMPLX              -                   -
  104.       Wandelt die doppelt-genaue komplexe Zahl X in eine COMPLEX*8-Zahl
  105.       Y um, die natürlich als solche typdeklariert worden sein muß. 
  106.       Auch diese Aufgabe läßt sich in 1 Zeile lösen:  Y = CMPLX(A,B)
  107.  
  108.  CONJG              DCONJG              -
  109.       Verwandelt die komplexe Zahl  X = A + i B  in die konjugiert-
  110.       komplexe  A - i B . Da bei uns X als Zahlenpaar A,B dargestellt
  111.       werden muß, ist das Ergebnis der Konjugation A,-B .
  112.  
  113.  DBLE               -                   -
  114.       Wandelt den Realteil der komplexen Größe in eine REAL*8-Zahl;
  115.       der Imaginärteil wird gleich 0 gesetzt. Wir haben es aber schon
  116.       mit doppelt-genauen Werten zu tun: also ist DBLE(X) gleich A .
  117.       
  118.  DCMPLX             -                   -
  119.       Diese Funktion habe die zwei Argumente Y und Z , die INTEGER*? 
  120.       oder REAL*? sein können. Sie werden zu REAL*8-Zahlen gemacht, die
  121.       Realteil und Imaginärteil der entstehenden COMPLEX*16-Größe X dar-
  122.       stellen. Da wir diese komplexe Variable X aus A und B zusammen-
  123.       setzen müssen, ist  A = DBLE(Y)  und  B = DBLE(Z) .
  124.  
  125.  -                  DIMAG               -
  126.       Gibt den Imaginärteil von X als REAL*8-Zahl an; demnach ist
  127.       DIMAG(X) gleich B .
  128.  
  129.  -                  DREAL               -
  130.       Gibt den REAL*8-Realteil der komplexen Zahl an; da sich unsere 
  131.       COMPLEX*16-Zahl X aus den zwei REAL*8-Größen A und B zusammensetzt,
  132.       ist  DREAL(X)  gleich  A .
  133.  
  134.  INT                -                   -
  135.       Wandelt den Realteil der komplexen Größe in eine INTEGER*4-Zahl.
  136.       Da der Realteil A unserer Größe X bekannt ist, lautet das Ergebnis:
  137.       INT(X)  gleich  INT(A) .
  138.       
  139.  REAL               REAL                -
  140.       Gibt den REAL*4-Realteil der komplexen Zahl an; da sich unsere 
  141.       COMPLEX*16-Zahl X aus den zwei REAL*8-Größen A und B zusammensetzt,
  142.       ist  REAL(X)  gleich  REAL(A) .
  143.  
  144.  
  145.  ACOS               -                   CDACOS
  146.       Standardmäßig gibt es keine Funktion, die den Arcus-Cosinus einer
  147.       komplexen Größe  X = A + i B  berechnet, unabhängig davon ob X
  148.       COMPLEX*8 oder *16 ist. Bei der Programmierung erkannte ich auch
  149.       warum: Die zugrundegelegte Formel ist numerisch äußerst diffizil.
  150.       Da  SQRT((A+1)^2+B^2) - SQRT((A-1)^2+B^2)  durch Rechenfehler nicht
  151.       gleich 0 werden darf, beschränkt sich der zulässige Wertebereich
  152.       auf  2.D-8 ≤ |A|,|B| ≤ 1.D15  mit  2.D-8 ≤ |A/B| ≤ 5.D7 .
  153.       Sofern A aut B gleich 0 ist, lautet die Einschränkung lediglich:
  154.       1.D-15 ≤ Betrag des anderen ≤ 1.3D154  (aut ist das ausschlie-
  155.       ßende Oder). Darüberhinaus darf natürlich  X = 0  sein. Jenseits
  156.       dieser Grenzen ist entweder das Ergebnis falsch oder die Fehler
  157.       unannehmbar groß.
  158.       Erwarten Sie deshalb von CDACOS nicht das Unmögliche!
  159.       Der Realteil C des Ergebnisses ist der Hauptwert des Arcus-Cosinus,
  160.       also  0 ≤ C ≤ π .
  161.       Aufruf:  CALL CDACOS(A,B,C,D)
  162.       
  163.  -                  -                   CDACOSH
  164.       Wie auch CDACOS ist CDACOSH bei Fortran nicht vorgesehen. Zur
  165.       Berechnung des Area-Cosinus hyperbolicus gilt dasselbe, was ich
  166.       zu CDACOS geschrieben habe, weil diese Funktion aufgerufen wird.
  167.       Der Imaginärteil D des Ergebnisses ist der Hauptwert des Arcus-
  168.       Cosinus, also  0 ≤ D ≤ π .
  169.       Aufruf:  CALL CDACOSH(A,B,C,D)
  170.  
  171.  -                  -                   CDACOT
  172.       Die Funktion CDACOT ist bei Fortran gar nicht vorhanden. Zur
  173.       Berechnung des Arcus-Cotangens gilt dasselbe, was ich zu CDATAN
  174.       geschrieben habe, weil diese Funktion aufgerufen wird.
  175.       Der Realteil C des Ergebnisses ist der Hauptwert des Arcus-
  176.       Cotangens, also  - π/2 < C ≤ π/2 .
  177.       Aufruf:  CALL CDACOT(A,B,C,D)
  178.  
  179.  -                  -                   CDACOTH
  180.       Wie auch CDACOT ist CDACOTH bei Fortran nicht vorgesehen. Zur
  181.       Berechnung des Area-Cotangens hyperbolicus gilt dasselbe, was ich
  182.       zu CDACOT geschrieben habe, weil diese Funktion aufgerufen wird.
  183.       Der Imaginärteil D des Ergebnisses ist der Hauptwert des Arcus-
  184.       Cotangens, also  - π/2 < D ≤ π/2 .
  185.       Aufruf:  CALL CDACOTH(A,B,C,D)
  186.  
  187.  ASIN               -                   CDASIN
  188.       Wie auch CDACOS ist CDASIN bei Fortran nicht vorgesehen. Zur
  189.       Berechnung des Arcus-Sinus gilt dasselbe, was ich schon zu CDACOS
  190.       geschrieben habe, weil beide Funktionen auf dieselbe Berechnungs-
  191.       routine zurückgreifen.
  192.       Der Realteil C des Ergebnisses ist der Hauptwert des Arcus-Sinus,
  193.       also  - π/2 ≤ C ≤ π/2 .
  194.       Aufruf:  CALL CDASIN(A,B,C,D)
  195.       
  196.  -                  -                   CDASINH
  197.       Wie auch CDASIN ist CDASINH bei Fortran nicht vorgesehen. Zur
  198.       Berechnung des Area-Sinus hyperbolicus gilt dasselbe, was ich
  199.       zu CDASIN geschrieben habe, weil diese Funktion aufgerufen wird.
  200.       Der Imaginärteil D des Ergebnisses ist der Hauptwert des Arcus-
  201.       Sinus, also  - π/2 ≤ D ≤ π/2 .
  202.       Aufruf:  CALL CDASINH(A,B,C,D)
  203.       
  204.  ATAN               -                   CDATAN
  205.       Auch der Arcus-Tangens eines komplexen Arguments ist keine Stan-
  206.       dardfunktion bei Fortran. In den beiden Polen  A = 0 , B = ± 1
  207.       liefert CDATAN  ± i 1.D308 ; in ihrer Nähe  |A| < 1.5D-154 ,
  208.       B = ± 1  entsteht Underflow im Argument des Logarithmus, was dann
  209.       als Meldung auf dem Bildschirm erscheint. Eine Anregung: Hier
  210.       könnten Sie durch Umformungen des Logarithmus Abhilfe schaffen.
  211.       Um Overflow zu umgehen, darf das Quadrat des Argument-Betrags
  212.       ( |X|^2 )  1.D308 nicht übertreffen.
  213.       Der Realteil C des Ergebnisses ist der Hauptwert des Arcus-Tangens,
  214.       also  - π/2 ≤ C ≤ π/2 .
  215.       Aufruf:  CALL CDATAN(A,B,C,D)
  216.  
  217.  -                  -                   CDATANH
  218.       Auch CDATANH ist bei Fortran nicht vorgesehen. Zur Berechnung des
  219.       Area-Tangens hyperbolicus gilt dasselbe, was ich zu CDATAN
  220.       geschrieben habe, weil diese Funktion aufgerufen wird.
  221.       Der Imaginärteil D des Ergebnisses ist der Hauptwert des Arcus-
  222.       Tangens, also  - π/2 ≤ D ≤ π/2 .
  223.       Aufruf:  CALL CDATANH(A,B,C,D)
  224.  
  225.  COS                CDCOS               CDCOS
  226.       Bei der Berechnung des Cosinus komplexer Argumente, deren Realteil
  227.       in Bogenmaß gegeben sein muß, treten e-Funktionen auf. Deshalb
  228.       muß  |B| ≤ 704  sein; andernfalls tritt zwar kein Overflow ein,
  229.       ist das Ergebnis aber nicht mehr ganz korrekt (Mehr als e^704
  230.       kann der Rechner nun mal nicht richtig).
  231.       Aufruf:  CALL CDCOS(A,B,C,D)
  232.  
  233.  COSH               -                   CDCOSH
  234.       Die Funktion Cosinus hyperbolicus eines komplexen Arguments exi-
  235.       stiert bei Fortran nicht - hier haben Sie sie! Bedenken Sie, daß
  236.       der cosh exponentiell wächst und damit sehr schnell sehr groß wird;
  237.       für |A| trifft hier das zu, was ich unter CDCOS zu |B| geschrieben
  238.       habe, weil CDCOS zur Berechnung herangezogen wird.
  239.       Aufruf:  CALL CDCOSH(A,B,C,D)
  240.       
  241.  -                  -                   CDCOT
  242.       Auch die Cotangens-Funktion kommt bei Fortran nicht vor. Meine
  243.       Ausführung benutzt das Unterprogramm CDDIV nach Berechnung von
  244.       cos und sin und liefert die Pole als  ± 1.D308 . Das Vorzeichen
  245.       in diesen ja ungeraden Polen ist dasjenige, das der Cosinus hat.
  246.       Näheres zu diesem Wert 1.D308 habe ich unter CDTAN ausgeführt.
  247.       Die hyperbolischen Funktionen ergeben keine Schwierigkeiten, da
  248.       nur ihr Quotient gebraucht wird, der für große B gegen 1 geht.
  249.       Aufruf:  CALL CDCOT(A,B,C,D)
  250.             
  251.  -                  -                   CDCOTH
  252.       Zur Berechnung des Cotangens hyperbolicus eines komplexen Argu-
  253.       ments wird CDCOT aufgerufen; Details finden Sie dort, wobei B
  254.       gegen A zu tauschen ist.
  255.       Aufruf:  CALL CDCOTH(A,B,C,D)
  256.  
  257.  -                  -                   CDDIV
  258.       Es berechnet den Quotienten der doppelt-genauen komplexen Zahlen
  259.       A1 + i B1  ( = Zähler) und  A2 + i B2  ( = Nenner). Wenn der Nenner
  260.       gleich 0 ist oder Underflow bei der Betragsbildung auftritt,
  261.       erscheint eine Meldung, und das Programm gibt den mathematisch
  262.       falschen Wert  C = 0.  und  D = 0.  zurück, sofern Sie "Continue?"
  263.       mit y beantworten.
  264.       Und um Overflow zu vermeiden, darf das Quadrat des Nennerbetrags
  265.       ( A2^2 + B2^2 )  1.D308 nicht überschreiten.
  266.       Aufruf:  CALL CDDIV(A1,B1,A2,B2,C,D)
  267.  
  268.  EXP                CDEXP               CDEXP
  269.       Ist die Exponentialfunktion e^X . Sie ist für Argumente endlichen
  270.       Betrags stets ungleich 0 , und damit das auch numerisch zutrifft,
  271.       muß  |A| ≤ 704  sein. Übertritt A diese Grenzen, wird  A := ± 704
  272.       gesetzt, damit die Rechnung sicher fortgeführt werden kann; das
  273.       Ergebnis ist dann aber nicht mehr 100 % richtig.
  274.       Aufruf:  CALL CDEXP(A,B,C,D)
  275.       
  276.  LOG                CDLOG               CDLOG
  277.       Die Funktion LOG ist der natürliche Logarithmus  ln X , also der
  278.       zur Basis e . Im Komplexen ist der Logarithmus unendlich viel-
  279.       deutig, so daß mein Programm den Hauptwert ermittelt, d.h. der
  280.       Imaginärteil D liegt im Bereich  - π < D ≤ π . Außerdem ist der
  281.       Logarithmus für 0 nicht definiert. In dem Fall, oder wenn bei
  282.       der Betragsbildung Underflow eintritt, unterbricht das 
  283.       Programm die Berechnung, und es erscheint eine Meldung auf dem
  284.       Bildschirm. Wenn Sie "Continue?" mit y beantworten, liefert CDLOG
  285.       das mathematisch nicht korrekte Ergebnis  C = - 1.D308  und  D = 0.
  286.       (unkorrekt deshalb, weil  C = - ∞  sein müßte).
  287.       Zum Sinn des Werts 1.D308 s. CDTAN.
  288.       Sofern A ungleich 0 ist (Das Ungleich-Zeichen gibt's in ASCII
  289.       nicht.), muß das Betragsquadrat des Arguments ( |X|^2 ) ≤ 1.D308
  290.       sein, damit kein Overflow eintritt.
  291.       Aufruf:  CALL CDLOG(A,B,C,D)
  292.  
  293.  -                  -                   CDMUL
  294.       Dieses Unterprogramm multipliziert die beiden doppelt-genauen
  295.       komplexen Zahlen  A1 + i B1  und  A2 + i B2  miteinander. Das
  296.       Produkt heißt  C + i D .
  297.       Aufruf:  CALL CDMUL(A1,B1,A2,B2,C,D)
  298.       
  299.  -                  -                   CDPOT
  300.       In doppelter Genauigkeit wird die komplexe Zahl  A1 + i B1  ( = Ba-
  301.       sis) zur komplexen Potenz  A2 + i B2  ( = Exponent) erhoben. Auch
  302.       hier ist Vorsicht geboten, da die Potenzierung sehr schnell den
  303.       Wertebereich von REAL*8 überschreiten kann. Wenn Basis und Exponent
  304.       gleich 0 sind, gibt das Programm das mathematisch falsche Ergebnis
  305.       C = 0.  und  D = 0.  zurück, sofern Sie die Meldung auf dem Bild-
  306.       schirm nach "Continue?" mit y beantworten.
  307.       CDPOT berechnet nur 1 Lösung, obwohl eine beliebige Potenz im Kom-
  308.       plexen beliebig vieldeutig ist: z.B. hat die n. Wurzel n Lösungen.
  309.       Das ist das Stichwort - mit  A2 = 1.D0/n  und  B2 = 0.  kann aus
  310.       jeder Zahl  A1 + i B1  (auch mit  B1 = 0. ) die n. Wurzel gezogen
  311.       werden. Im übrigen gilt, was ich zu CDLOG geschrieben habe, da
  312.       CDPOT darauf zurückgreift.
  313.       Aufruf:  CALL CDPOT(A1,B1,A2,B2,C,D)
  314.       
  315.  SIN                CDSIN               CDSIN
  316.       Bei der Berechnung des Sinus eines komplexen Arguments, dessen 
  317.       Realteil in Bogenmaß gegeben sein muß, treten e-Funktionen auf. 
  318.       Deshalb gilt dasselbe, was ich schon zu CDCOS gesagt habe.
  319.       Aufruf:  CALL CDSIN(A,B,C,D)
  320.  
  321.  SINH               -                   CDSINH
  322.       Auch diese Funktion ist bei Fortran nicht für komplexe Argumente
  323.       eingerichtet. Der Sinus hyperbolicus wächst exponentiell, was den
  324.       Bereich der Argumente mit richtigen Ergebnissen einengt, s. CDCOSH.
  325.       Aufruf:  CALL CDSINH(A,B,C,D)
  326.       
  327.  SQRT               CDSQRT              CDSQRT
  328.       Berechnet die doppelt-genaue komplexe Wurzel der COMPLEX*16-Zahl
  329.       X = A + i B ; die Wurzel heißt  C + i D . Da die Quadratwurzel
  330.       zweideutig ist ( Wurzel(1) = ± 1 ), liefert CDSQRT den Hauptwert,
  331.       d.h. denjenigen mit  C ≥ 0  <=>  - π/2 < arctan(D/C) ≤ π/2 .
  332.       Wenn bei der Betragsbildung Underflow auftritt, erscheint eine
  333.       Meldung; wenn Sie dann "Continue?" mit y beantworten, wird als
  334.       Ergebnis  C = 0.  und  D = 0.  zurückgegeben.
  335.       Sofern A ungleich 0 ist, muß  |X|^2 ≤ 1.D308  sein, damit kein
  336.       Overflow auftritt.
  337.       Aufruf:  CALL CDSQRT(A,B,C,D)       
  338.  
  339.  TAN                -                   CDTAN
  340.       Die Tangens-Funktion komplexen Arguments ist bei ProFortran nicht
  341.       vorhanden. Da der Tangens bei den reellen Argumenten
  342.       A = ± π/2 + k * π , k eine ganze Zahl, und  B = 0.  die Funktions-
  343.       werte  ± ∞  annimmt und diese Größe ja nicht darstellbar ist,
  344.       liefert CDTAN die ungefähr größte in DOUBLE PRECISION vorhandene
  345.       Zahl, nämlich  ± 1.D308 . Diese Pole des Tangens sind ungerade,
  346.       einen exakten Wert haben sie also nicht; entsprechend der Konven-
  347.       tion gibt CDTAN jedoch 1.D308 mit dem Vorzeichen zurück, das der
  348.       Sinus gleichen Arguments hat.
  349.       Die zwei Zahlen  ± 1.D308  entsprechen tatsächlich  ± ∞ , denn es
  350.       gilt  1/( ± 1.D308) = ± 1.D-308 ≡ 0. 
  351.       Zur Nicht-Problematik eines großen Imaginärteils B s. CDCOT.
  352.       Aufruf:  CALL CDTAN(A,B,C,D)
  353.  
  354.  TANH               -                   CDTANH
  355.       Mein Tangens hyperbolicus eines komplexen Arguments X ruft CDTAN
  356.       auf. Es gilt also allgemein, was unter CDTAN, und speziell für
  357.       große A, was unter CDCOTH zu lesen ist.
  358.       Aufruf:  CALL CDTANH(A,B,C,D)
  359.       
  360.                                 * * *
  361.